从另一个数据表获得参数
    如果参数的值既不是在设计期间指定,也不是在运行期间指定,就可以使用TQuery构件的DataSource属性用于指定一个数据源(TDataSource构件),在这个数据源中查找与参数名匹配的字段,然后用这个字段的值作为参数的值。

    假设一个数据模块LinkModule,上面有一个TQuery构件叫OrdersQuery,它的SQL语句如下:
    SELECT CustNo, OrderNo, SaleDate FROM Orders
    WHERE CustNo = :CustNo

    另外,数据模块上还有下列构件:
    (1)一个TTable构件叫CustomersTable,它的TableName属性设为CUSTOMER.DB。
    (2)一个TDataSource构件叫OrdersSource,它的DataSet属性设为OrdersQuery。
    (3)一个TDataSource构件叫CustomersSource,它的DataSet属性设为CustomersTable。
    (4)OrdersQuery的DataSource属性也设为CustomersSource。
          TopoGraph.bmp (122934 bytes)

    (5)窗体上有两个TDBGrid构件,它们的DataSource属性分别指定CustomersSource和OrdersSource。如果编译和运行这个应用程序,将看到如图所示的效果:

    因为运行的时候没有对SQL语句中的:CustNo参数赋值,OrdersQuery将试图从CustomersSource指定的数据集中查找匹配的字段。由于CustomersSource是从CUSTOMER.DB中获取数据的,而CUSTOMER.DB中恰好有一个CustNo字段,所以,:CustNo参数的值就是CustNo字段的值。如果您在显示CUSTOMER.DB的数据表中选择了另一条记录,将导致:CustNo参数的值跟着变化。也就是说,两个TDBGrid已经建立的主从关系。因此,每次在Customers数据表中选择一条记录,OrdersQuery的Select语句执行,从Orders数据表中返回CustNo等于当前Customer数据表的CustNo的所有记录。

RainBow策划制作 版权所有